<?php

class UsuarioModel extends Model{
    public $_tabela = "usuarios";
    public $dados = array();
    
    /*Função para validar os campos do $_POST e retorna os dados num array $dados */
    public function validar_campos(){
    $erros = array();
    
    
    /*Expressões regulares */
    $expressao2 = "/^[0-9]+$/"; /*Somente números*/
    $expressao3 = "/^(([0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2})|([0-9]{11}))$/";  /*CPF com os pontos e traço ou sem*/
    $expressao4 = "/[a-zA-Z0-9]+[a-zA-Z0-9_.-]+@{1}[a-zA-Z0-9_.-]*\\.+[a-z]{2,4}/";  /*E-mail*/
    /*Fim empressões */
    
      
        if($_POST["nome"] == "" || strlen($_POST["nome"]) < 6 ){
             $erros["Nome:"] = "Mínimo 6 caracteres.<br/> Campo obrigatório.";
        }  
       
        if($_POST["cpf"]== "" || !preg_match($expressao3, $_POST["cpf"])){ 
             $erros["Cpf:"] = "Verifique se os dados foram inseridos corretamente.";
        }
         
        if(!preg_match($expressao2 , $_POST["rg"]) ){
             $erros["Rg:"] = "Verifique se os dados foram inseridos corretamente.";
        }
        
        if($_POST["email"] == "" || !preg_match($expressao4, $_POST["email"])){
             $erros["Email:"] = "Verifique se os dados foram inseridos corretamente.";
        }
        
        if($_POST["senha"] == "" || $_POST["senha"] != $_POST["confirma_senha"] || $_POST["confirma_senha"] == "" || strlen($_POST["senha"]) < 6 || strlen($_POST["confirma_senha"]) < 6  ){
             $erros["Senha:"] = "Verifique se os dados foram inseridos corretamente.";
        }
        
       $this->checar_usuario($_POST["cpf"]);
        if(empty($erros)){
            
          $usuario = new Usuario($_POST["cpf"],
                                 $_POST["nome"],
                                 $_POST["rg"],
                                 $_POST["email"],
                                 md5($_POST["senha"]),
                                 $_POST["dataNasc"],
                                 "0", /*Nivel */
                                 $_POST["endereco"],
                                 $_POST["numero"],
                                 $_POST["bairro"],
                                 $_POST["cidade"],
                                 $_POST["telefone"],
                                 $_POST["celular"],
                                 date('Y-m-d'),
                                 "N"   
                  );  
          
         return $this->dados = array (
                "CPF" => $usuario->getCpf(),
                "NOME" => $usuario->getNome(),
                "EMAIL" => $usuario->getEmail(),
                "SENHA" => $usuario->getSenha(),
                "RG" => $usuario->getRg(),
                "NIVEL" => $usuario->getNivel(),
                "ENDERECO" => $usuario->getEndereco(),
                "NUMERO" => $usuario->getNumero(),
                "BAIRRO" => $usuario->getBairro(),
                "CIDADE" => $usuario->getCidade(),
                "TELEFONE" => $usuario->getTelefone(),
                "CELULAR" => $usuario->getCelular(),
                "DATANASC" => $this->converteData($usuario->getDataNasc()),
                "DATAREG" => $usuario->getDataReg(),
                "ATIVO" => $usuario->getAtivo()
            );
           
        }else {
            
            return $erros; /*retorna o array contendos todos os erros. */
        }  
    }
    
    
    /*Função para validar os campos do $_POST e retorna os dados num array $dados */
    public function validar_campos_editados(){
    $erros = array();
    
    
    /*Expressões regulares */
    $expressao2 = "/^[0-9]+$/"; /*Somente números*/
    $expressao3 = "/^(([0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2})|([0-9]{11}))$/";  /*CPF com os pontos e traço ou sem*/
    $expressao4 = "/[a-zA-Z0-9]+[a-zA-Z0-9_.-]+@{1}[a-zA-Z0-9_.-]*\\.+[a-z]{2,4}/";  /*E-mail*/
    /*Fim empressões */
    
      
        if($_POST["nome"] == "" || strlen($_POST["nome"]) < 6 ){
             $erros["Nome:"] = "Mínimo 6 caracteres.<br/> Campo obrigatório.";
        }  
       
        if($_POST["cpf"]== "" || !preg_match($expressao3, $_POST["cpf"])){ 
             $erros["Cpf:"] = "Verifique se os dados foram inseridos corretamente.";
        }
         
        if(!preg_match($expressao2 , $_POST["rg"]) ){
             $erros["Rg:"] = "Verifique se os dados foram inseridos corretamente.";
        }
        
        if($_POST["email"] == "" || !preg_match($expressao4, $_POST["email"])){
             $erros["Email:"] = "Verifique se os dados foram inseridos corretamente.";
        }
        
       
        if(empty($erros)){
            
          $usuario = new Usuario($_POST["cpf"],
                                 $_POST["nome"],
                                 $_POST["rg"],
                                 $_POST["email"],
                                 null, /*senha */
                                 $_POST["dataNasc"],
                                 null, /*Nivel */
                                 $_POST["endereco"],
                                 $_POST["numero"],
                                 $_POST["bairro"],
                                 $_POST["cidade"],
                                 $_POST["telefone"],
                                 $_POST["celular"],
                                 null /*Data registro */);  
          
          
          
 
         return $this->dados = array (
                "CPF" => $usuario->getCpf(),
                "NOME" => $usuario->getNome(),
                "EMAIL" => $usuario->getEmail(),
               // "SENHA" => $usuario->getSenha(),
                "RG" => $usuario->getRg(),
              //  "NIVEL" => $usuario->getNivel(),
                "ENDERECO" => $usuario->getEndereco(),
                "NUMERO" => $usuario->getNumero(),
                "BAIRRO" => $usuario->getBairro(),
                "CIDADE" => $usuario->getCidade(),
                "TELEFONE" => $usuario->getTelefone(),
                "CELULAR" => $usuario->getCelular(),
                "DATANASC" => $this->converteData($usuario->getDataNasc()),
              //  "DATAREG" => $usuario->getDataReg()
            );
           
        }else {
            
            return $erros; /*retorna o array contendos todos os erros. */
        }  
    }
    
    /*Altera a senha do usuário */
    public function validar_alteracao(){
        $senha = $_SESSION["userData"]["SENHA"];
        $email = $_SESSION["userData"]["EMAIL"];
        $senhaNova = md5($_POST["senha"]);
        $erros = array();
        
       
        if (md5($_POST["senhaAtual"]) != $senha ){
            $erros["erros"]["Senha Atual:"] = "Senha atual incorreta." ;
        }
        if($_POST["senha"] == "" || $_POST["senha"] != $_POST["confirma_senha"] || $_POST["confirma_senha"] == "" || strlen($_POST["senha"]) < 6 || strlen($_POST["confirma_senha"]) < 6  ){
             $erros["erros"]["Senha:"] = "Verifique se os dados foram inseridos corretamente.";
        }
        
         if(empty($erros)){
           return  $this->dados = array( "SENHA" => $senhaNova,
                                   "EMAIL" => $_SESSION["userData"]["EMAIL"],
                                   "NOME" => $_SESSION["userData"]["NOME"] );
         }
         else{return $erros;}
    }   
    
    public function alterar_senha($dados, $email, $senha){
        return $this->atualizar_nosafe("usuarios", $dados, "EMAIL=\"$email\" and SENHA=\"$senha\"") or die('erro'); /*Exceção precisa ser gerada. */
    }
    
    /*Usuário existente */
    public function checar_usuario($cpf){
        $redi = new redirectorHelper();
    if (count( $this->selecionar("CPF='$cpf'", null, null, null)) >= 1){
          $_SESSION['tempo'] = strtotime(date("Y-m-d H:i:s"));
          $_SESSION['msg'] = "<img src='".BASE."/webfiles/images/exclamation-red.png' /> Usuário já existente.";
          $redi->goToController("usuarios");
          exit();
       }
    }
    
    /*Insere um usuário no banco de dados*/
    public function cadastrar($dados){
        return $this->insert($dados);
    }
    
    public function selecionar($where , $limit, $offset, $orderby){
        return $this->read($where, $limit, $offset, $orderby);
    }
    
    public function atualizar($tabela ,$dados,$where){
        return $this->update($tabela, $dados, $where);
        
    }
    /* Atualizar sem o safe update mode*/
    public function atualizar_nosafe($tabela ,$dados,$where){
        return $this->update_NOsafe_mode($tabela, $dados, $where);
        
    }
    
    public function deletar($where){
        return $this->delete($where);
    }
    
   
    
}
?>
